package VideoJuego;

import SistemaGeneral.TheRace;
import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;

/**
 * Este clase se encarga de decirnos que objetos se van a crear dependiendo del nivel  en el
 * que el usuario se encuentre y de administrar todos los elementos que se necesitan en cada carrera
 * dibujándolos y actualizándolos en el orden adecuado.
 *
 * Desarrolladores:
 * Equipo: The Dream Team
 * @author José Francisco Ruiz Martínez 	A01166298
 * @author José Héctor Bermúdez Robles		A01161142
 * @author Arturo Ramírez Morales		A01165819
 * @version 1.0.3  Noviembre 2010
 */
public class AdminNivel extends GameCanvas {

    private int nivel=1;
    /**
     * Indica el ancho de la pantalla
     */
    public static int ANCHO=0;        // Ancho y alto de la pantalla del celular
    /**
     * Indica el alto de la pantalla
     */
    public static int ALTO=0;
    private FondoNivel fondoNivel;
    private Basura basura;
    private Arbol arboles;
    private Enemigo arma;
    private boolean armaEliminada=false;

    /**
     * Construye el objeto y recibe los valores para saber que tipo de objetos tiene que crear
     * @param midlet
     * @param nivel nos dice las imagenes que se tienen que cargar dependiendo del nivel
     * @param Ancho nos dice el ancho de la pantalla
     * @param Alto nos dice el alto de la pantalla
     */
    public AdminNivel(TheRace midlet, int nivel, int Ancho, int Alto) {
        super(true);
        this.setFullScreenMode(true);
        this.ANCHO = this.getWidth();
        this.ALTO = this.getHeight();
        this.nivel = nivel;
        try {
               fondoNivel = new FondoNivel(ANCHO, ALTO,this.nivel);
               basura = new Basura(fondoNivel.getPosicionY());
               arboles = new Arbol(fondoNivel.getPosicionY(), this.nivel);
               arma= new Enemigo(fondoNivel.getPosicionY());
        } catch (IOException ex) {
            System.out.println("No carga las imagenes");
            ex.printStackTrace();
        }

    }

    /**
     *Actualiza la posición del fondo y de las basuras como de los objetos que se dibujan
     * en relación al fondo
     */
    public void actualizar() {
        fondoNivel.actualizar();
        basura.actualizar(fondoNivel.getMoverobjetos());
        arboles.actualizar(fondoNivel.getMoverobjetos());
        if(armaEliminada !=true){
        arma.actualizar(fondoNivel.getMoverobjetos());
        }
    }

    /**
     *Dibuja todos los objetos del esenario
     * @param g En que instancia se dibujaran los objetos
     */
    public void dibujar(Graphics g) {

        fondoNivel.dibujar(g);
        basura.dibujar(g);
        arboles.dibujar(g);
        if(armaEliminada !=true){
        arma.dibujar(g);
        }
        flushGraphics();    // Actualiza los cambios en la memoria de la pantalla
        
    }

    /**
     * Destruye a todos los objetos que se utilizaron en el nivel
     */
    public void destruir() {
        fondoNivel.destruir();
        basura.destruir();
        arboles.destruir();
        arma.destruir();
        nivel=1;
        ANCHO=0;
        ALTO=0;

    }

    /**
     * Regresa el sprite de la basura que se este utilizando
     * @return regresa el sprite de la basura
     */
    public Sprite getBasura() {
        return basura.getBasura();
    }

    /**
     * Se encarga de destruir todos las referencias de la basura
     */
    public void destruirBasura() {
        basura.destruir();
    }

    /**
     * Crea un nuevo objeto de tipo basura
     */
    public void crearBasura() {
        try {
            basura = new Basura(fondoNivel.getPosicionY());
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Las imagenes para crear la basura no se pueden cargar");
        }
    }
    /**
     * Se encarga de regresar el valor que tiene cada basura dependiendo del tipo de basura que sea
     * @return regresa el valor que tiene la basura en forma de entero
     */
    public int getValorBasura() {
        return basura.getValorBasura();
    }

    public Sprite getArboles() {
        return arboles.getArboles();
    }

    /**
     * Se encarga de destruir todas las referencias a los arboles
     */
    public void destruirArbol() {
        arboles.destruir();
    }

    /**
     * Crea un nuevo arbol
     */
    public void crearArbol() {
        try {
            arboles = new Arbol(fondoNivel.getPosicionY(),this.nivel);
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Las imagenes para crear los arboles no se pueden cargar");
        }
    }

     /**
     * Regresa el sprite de la arma que se este utilizando
     * @return regresa el sprite de la basura
     */
    public Sprite getArma() {
        return arma.getArma();
    }

    /**
     * Se encarga de destruir todos las referencias de la basura
     */
    public void destruirArma() {
        arma.destruir();
        armaEliminada=true;
    }

    /**
     * Crea un nuevo objeto de tipo basura
     */
    public void crearArma() {
        try {
            arma = new Enemigo(fondoNivel.getPosicionY());
            armaEliminada=false;
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Las imagenes para crear la arma no se pueden cargar");
        }
    }
    /**
     * Se encarga de regresar el valor que tiene cada basura dependiendo del tipo de basura que sea
     * @return regresa el valor que tiene la basura en forma de entero
     */
    public int getValorArma() {
        return arma.getValorArma();
    }
}

